from concurrent import futures
import logging

import grpc
import test_pb2
import test_pb2_grpc


class UserInfo(test_pb2_grpc.UserInfoServicer):  # 对应test.proto中定义的服务，17行
    def Info(self, request, context):  # 对应test.proto中定义的info接口，18行
        print(request.name, request.age)
        return test_pb2.response(message='姓名是{}, 年龄是{}岁'.format(request.name, request.age))


def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))  # 开启多线程
    test_pb2_grpc.add_UserInfoServicer_to_server(UserInfo(), server)  # 注册本地服务
    server.add_insecure_port('[::]:10086')  # 指定端口及IP
    # server.add_insecure_port('0.0.0.0:10086')  # 指定端口及IP
    server.start()  # 启动服务器 start()是非阻塞的，将实例化一个新线程来处理请求
    server.wait_for_termination()  # 阻塞调用线程，知道服务器终止


if __name__ == '__main__':
    logging.basicConfig()
    serve()

